当前位置:  开发笔记 > 开发工具 > 正文

无法将`[Int]'与`Integer - > Int'匹配,但在GHCI中有效

如何解决《无法将`[Int]'与`Integer->Int'匹配,但在GHCI中有效》经验,为你挑选了1个好方法。

我是Haskell的新手,所以这个问题对于大多数Haskell程序员来说应该是相当简单的:我有一个函数digits :: Integer -> [Int]可以将整数转换为其数字列表(123到[1,2,3]).现在得到我sum $ digits 123在ghci中输入的那些数字的总和,一切正常,它输出6.然而,一旦我在文件中创建函数如下,我得到一个错误.这可能与ghci推断123的类型这一事实有关,但这还不够,所以我可以解决问题.

文本文件中的函数:

digitalSum :: Integer -> Int
digitalSum = sum $ digits

和错误:

* Couldn't match type `[Int]' with `Integer -> Int'
  Expected type: Integer -> Integer -> Int
    Actual type: Integer -> [Int]
* In the second argument of `($)', namely `digits'
  In the expression: sum $ digits
  In an equation for `digitalSum': digitalSum = sum $ digits

sepp2k.. 5

虽然sum $ digits 123在GHCi中工作(就像它在Haskell文件中一样),sum $ digits(也可以写得很好sum digits)在GHCi中也不起作用.

问题是sum需要一个数字列表,但digits不是列表,它是一个函数.

你想要digitalSum x = sum $ digits x或者digitalSum = sum . digits.这.是函数组合运算符,它从两个现有函数中创建一个函数(相反$,它接受函数及其参数,而不是另一个函数).



1> sepp2k..:

虽然sum $ digits 123在GHCi中工作(就像它在Haskell文件中一样),sum $ digits(也可以写得很好sum digits)在GHCi中也不起作用.

问题是sum需要一个数字列表,但digits不是列表,它是一个函数.

你想要digitalSum x = sum $ digits x或者digitalSum = sum . digits.这.是函数组合运算符,它从两个现有函数中创建一个函数(相反$,它接受函数及其参数,而不是另一个函数).

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有